package com.dao.compteclient;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.hibernate.BeanCompteClient;
import com.hibernate.HibernateUtil;

public class DAOClient {

	public BeanRechercherClient listerClients() {
		
		final BeanRechercherClient lRetour = new BeanRechercherClient();
		
		try {
			 final List<BeanCompteClient> lListeClient = new LinkedList<BeanCompteClient>();
			 
			 Session session = HibernateUtil.currentSession();
			 Query query = session.createQuery("from BeanCompteClient");
			 List list = query.list();
			 Iterator it = list.iterator();
			 while(it.hasNext())
			 {
				 BeanCompteClient bClient = (BeanCompteClient)it.next();					
				 lListeClient.add(bClient);
			 }
	
			 HibernateUtil.closeSession();			
			 lRetour.setlisteClients(lListeClient);
			
		} catch (HibernateException e) {
			e.printStackTrace();
			lRetour.setErreur("Hibernate Exception : " + e.getMessage());
		} 
		catch (Exception e) {
			e.printStackTrace();
			lRetour.setErreur("Exception : " + e.getMessage());
		} 
		
		return lRetour;
	}
	
	public String creerClient(final String pLogin, final String pMdp, 
				final String pPrenom, final String pNom, final String pAdresse, 
				final String pMail, final String pFixe, final String pPort, final String pInfoBanc){
			
		try{
			Session session = HibernateUtil.currentSession();
			   
			Transaction tx = session.beginTransaction();
		
			BeanCompteClient compte = new BeanCompteClient();
			compte.setLogin(pLogin);
			compte.setMotDePasse(pMdp);
			compte.setNomClient(pNom);
			compte.setPrenomClient(pPrenom);
			compte.setAdresseClient(pAdresse);
			compte.seteMail(pMail);
			compte.setTelephoneFixe(pFixe);
			compte.setTelephonePortable(pPort);
			compte.setNbPoints(0);
			compte.setInfoBancaire(pInfoBanc);
			session.save(compte);
			
			tx.commit();
		
			HibernateUtil.closeSession();
			
			return null;
		}
		catch(Exception e){
			return "Exception : " + e.getMessage();
		}
	}
	
	public String supprimerClient(final String pLogin){
		try{
			Session session = HibernateUtil.currentSession();
			   
			Transaction tx = session.beginTransaction();
		
			BeanCompteClient compte = (BeanCompteClient) session.load(BeanCompteClient.class, pLogin);
			
			session.delete(compte);
			
			tx.commit();
		
			HibernateUtil.closeSession();
			return null;
		}
		catch(Exception e){
			return "Exception : " + e.getMessage() + " <> " + pLogin;
		}
	}
}
